/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.mantenimiento</code> agrupa todas las
 * interfaces, clases y elementos de la GUI para la gestión del subsistema 
 * de Mantenimiento
 */
package edu.uoc.tds.pec4.mantenimiento;

import edu.uoc.tds.pec4.rmi.GestorMantenimientoInterface;
import edu.uoc.tds.pec4.beans.AuditoriaDTO;
import edu.uoc.tds.pec4.beans.EquipamientoDTO;
import edu.uoc.tds.pec4.beans.UsuarioDTO;
import edu.uoc.tds.pec4.common.util.Constantes;
import edu.uoc.tds.pec4.common.util.TDSLanguageUtils;
import edu.uoc.tds.pec4.common.util.UtilidadesGUI;
import edu.uoc.tds.pec4.common.validation.ValidarGUI;
import edu.uoc.tds.pec4.server.bbdd.exceptions.GestorMantenimientoException;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;
import javax.swing.WindowConstants;

/**
 * La clase <code>DialogConsultaEquipamiento</code> representa la interfaz de
 * usuario para la consulta, baja y mantenimiento de un equipamiento.<br />
 *
 * Interficie de usuario para el alta de equipamientos.
 *
 * @author	Luis Rivas Mariño
 * @version	07/12/2011
 * @see		edu.uoc.tds.pec4.rmi.GestorMantenimientoInterface
 */
public class DialogConsultaEquipamiento extends JDialog {

    private JButton btnCancelar;
    private JComboBox cbEquipamiento;
    private JCheckBox chkInactivo;
    private JButton btnBaja;
    private JButton btnModificacion;
    private JLabel lblIdEquipamiento;
    private JLabel lblNombre;
    private JTextField idEquipamiento;
    private JTextField nomEquipamiento;
    private JLabel lblPrecioDia;
    private JLabel lblPrecioHora;
    private JPanel panelBotones;
    private JPanel panelDatos;
    private JPanel panelBuscarEq;
    private JPanel panelPrecio;
    private JTextField precioDia;
    private JTextField precioHora;
    private JRadioButton rBtnAsistente;
    private JRadioButton rBtnEspacio;
    private ButtonGroup btnGrpPrecio;
    /** clientConnected Indica si el cliente está conectado al servidor */
    private boolean clientConnected = false;
    /** objRemoto Es el objeto empleado como interfaz en la comunicación RMI */
    private GestorMantenimientoInterface objRemotoMantenimiento = null;
    // Identificador del usuario conectado
    private String idConectado;

    /** Creates new form DialogConsultaEquipamiento */
    public DialogConsultaEquipamiento(Frame parent, boolean modal, UsuarioDTO usLogeado) {
        super(parent, TDSLanguageUtils.getMessage("mantenimiento.equipamiento.actualizacion.titulo"), modal);

        conectarCliente();

        inicializarComponentes();

        // Obtenemos el id del usuario 
        idConectado = usLogeado.getIdUsuario();

        //Centramos la ventana en la pantalla
        UtilidadesGUI.centrarVentana(this);

    }

    /** Este método es llamado desde el constructor para 
     *  inicializar el formulario.
     */
    private void inicializarComponentes() {

        panelPrecio = new JPanel();
        rBtnEspacio = new JRadioButton();
        rBtnAsistente = new JRadioButton();
        precioDia = new JTextField();
        precioHora = new JTextField();
        lblPrecioDia = new JLabel();
        lblPrecioHora = new JLabel();
        panelBuscarEq = new JPanel();
        cbEquipamiento = getComboEquipamiento();
        panelDatos = new JPanel();
        lblIdEquipamiento = new JLabel();
        idEquipamiento = new JTextField();
        nomEquipamiento = new JTextField();
        lblNombre = new JLabel();
        chkInactivo = new JCheckBox();
        panelBotones = new JPanel();
        btnCancelar = getBtnCancelar();
        btnBaja = new JButton();
        btnModificacion = new JButton();
        btnGrpPrecio = new ButtonGroup();

        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        panelPrecio.setBorder(BorderFactory.createTitledBorder(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.panel.precio")));
        btnGrpPrecio.add(rBtnEspacio);
        rBtnEspacio.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.seleccion.espacio"));
        btnGrpPrecio.add(rBtnAsistente);
        rBtnAsistente.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.seleccion.asistente"));
        precioDia.setHorizontalAlignment(JTextField.RIGHT);
        precioHora.setHorizontalAlignment(JTextField.RIGHT);
        lblPrecioDia.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.etiqueta.preciodia"));
        lblPrecioHora.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.etiqueta.preciohora"));

        GroupLayout panelPrecioLayout = new GroupLayout(panelPrecio);
        panelPrecio.setLayout(panelPrecioLayout);
        panelPrecioLayout.setHorizontalGroup(
                panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(GroupLayout.Alignment.TRAILING, panelPrecioLayout.createSequentialGroup().addContainerGap().addGroup(panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(rBtnEspacio).addComponent(rBtnAsistente)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 94, Short.MAX_VALUE).addGroup(panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.TRAILING).addComponent(lblPrecioHora).addComponent(lblPrecioDia)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addGroup(panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addComponent(precioHora).addComponent(precioDia, GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)).addContainerGap()));
        panelPrecioLayout.setVerticalGroup(
                panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(panelPrecioLayout.createSequentialGroup().addGroup(panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(rBtnEspacio).addComponent(precioDia, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(lblPrecioDia)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addGroup(panelPrecioLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(rBtnAsistente).addComponent(precioHora, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(lblPrecioHora)).addContainerGap()));

        panelBuscarEq.setBorder(BorderFactory.createTitledBorder(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.panel.datos")));

        GroupLayout panelBuscarEqLayout = new GroupLayout(panelBuscarEq);
        panelBuscarEq.setLayout(panelBuscarEqLayout);
        panelBuscarEqLayout.setHorizontalGroup(
                panelBuscarEqLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(panelBuscarEqLayout.createSequentialGroup().addContainerGap(130, Short.MAX_VALUE).addComponent(cbEquipamiento, javax.swing.GroupLayout.PREFERRED_SIZE, 208, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap()));
        panelBuscarEqLayout.setVerticalGroup(
                panelBuscarEqLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(panelBuscarEqLayout.createSequentialGroup().addComponent(cbEquipamiento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        panelDatos.setBorder(BorderFactory.createTitledBorder("Datos del equipamiento"));
        lblIdEquipamiento.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.alta.etiqueta.idequipamiento"));
        idEquipamiento.setHorizontalAlignment(JTextField.CENTER);
        idEquipamiento.setEditable(false);
        idEquipamiento.setFont(new java.awt.Font(Constantes.TAHOMA, 1, 12));
        nomEquipamiento.setHorizontalAlignment(JTextField.LEFT);
        lblNombre.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.alta.etiqueta.nombre"));
        chkInactivo.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.check.inactivo"));
        chkInactivo.addItemListener(new java.awt.event.ItemListener() {

            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                chkInactivoItemStateChanged(evt);
            }
        });

        GroupLayout panelDatosLayout = new GroupLayout(panelDatos);
        panelDatos.setLayout(panelDatosLayout);
        panelDatosLayout.setHorizontalGroup(
                panelDatosLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(panelDatosLayout.createSequentialGroup().addContainerGap().addGroup(panelDatosLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(lblIdEquipamiento).addComponent(lblNombre)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addGroup(panelDatosLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(nomEquipamiento, GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE).addGroup(panelDatosLayout.createSequentialGroup().addComponent(idEquipamiento, GroupLayout.PREFERRED_SIZE, 91, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 98, Short.MAX_VALUE).addComponent(chkInactivo))).addContainerGap()));
        panelDatosLayout.setVerticalGroup(
                panelDatosLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(panelDatosLayout.createSequentialGroup().addContainerGap().addGroup(panelDatosLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(lblIdEquipamiento).addComponent(idEquipamiento, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(chkInactivo)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addGroup(panelDatosLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(nomEquipamiento, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(lblNombre)).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        btnCancelar.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.boton.volver"));
        btnBaja.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.boton.baja"));
        btnBaja.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBajaActionPerformed(evt);
            }
        });
        btnModificacion.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.boton.modificacion"));
        btnModificacion.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificacionActionPerformed(evt);
            }
        });
        GroupLayout panelBotonesLayout = new GroupLayout(panelBotones);
        panelBotones.setLayout(panelBotonesLayout);
        panelBotonesLayout.setHorizontalGroup(
                panelBotonesLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(GroupLayout.Alignment.TRAILING, panelBotonesLayout.createSequentialGroup().addComponent(btnBaja).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(btnModificacion).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 149, Short.MAX_VALUE).addComponent(btnCancelar).addGap(18, 18, 18)));
        panelBotonesLayout.setVerticalGroup(
                panelBotonesLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(panelBotonesLayout.createSequentialGroup().addContainerGap().addGroup(panelBotonesLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(btnCancelar).addComponent(btnBaja).addComponent(btnModificacion)).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 400, Short.MAX_VALUE).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(panelPrecio, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(panelDatos, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(panelBuscarEq, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(panelBotones, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap()));
        layout.setVerticalGroup(
                layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 324, Short.MAX_VALUE).addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(panelBuscarEq, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(panelDatos, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(panelPrecio, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(panelBotones, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)));

        deshabilitaControles();

        pack();
    }

    /**
     * Conectar con el servidor RMI
     * Permitela conexion con el servidor RMI
     */
    private void conectarCliente() {
        try {
            objRemotoMantenimiento = (GestorMantenimientoInterface) Naming.lookup("GestorMantenimiento");
            clientConnected = true;
        } catch (NotBoundException eNbe) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.notbound") + "\n" + eNbe.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException eRe) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.url") + "\n" + eRe.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        } catch (MalformedURLException eMULRe) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.conn") + "\n" + eMULRe.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        } catch (Exception eE) {
            objRemotoMantenimiento = null;
            JOptionPane.showMessageDialog(null,
                    TDSLanguageUtils.getMessage("cliente.error.conn") + "\n" + eE.getMessage(),
                    TDSLanguageUtils.getMessage("cliente.error"), JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * Deshabilita los controles del formulario
     */
    private void deshabilitaControles() {
        rBtnEspacio.setEnabled(false);
        rBtnEspacio.setSelected(false);
        rBtnAsistente.setEnabled(false);
        rBtnAsistente.setSelected(false);
        precioDia.setEditable(false);
        precioDia.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.preciodia"));
        precioHora.setEditable(false);
        precioHora.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.preciohora"));
        nomEquipamiento.setEditable(false);
        nomEquipamiento.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.nombre"));
        idEquipamiento.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.idequipamiento"));
        chkInactivo.setEnabled(false);
        chkInactivo.setSelected(false);
        btnBaja.setEnabled(false);
        btnModificacion.setEnabled(false);
    }

    /**
     * Habilita los controles del formulario
     */
    private void habilitaControles() {
        rBtnEspacio.setEnabled(true);
        rBtnAsistente.setEnabled(true);
        precioDia.setEditable(true);
        precioHora.setEditable(true);
        nomEquipamiento.setEditable(true);
        chkInactivo.setSelected(false);
        chkInactivo.setEnabled(true);
    }

    /**
     * Este método inicializa el desplegable de equipamientos
     * con los existentes en la base de datos
     */
    private JComboBox getComboEquipamiento() {
        if (cbEquipamiento == null) {
            try {
                List<EquipamientoDTO> equipamientos = objRemotoMantenimiento.listaEquipamiento();
                cbEquipamiento = new JComboBox(equipamientos.toArray());
                cbEquipamiento.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        cbEquipamientoActionPerformed(e);
                    }
                });
            } catch (RemoteException eRe) {
                JOptionPane.showMessageDialog(null,
                        eRe.getMessage(), TDSLanguageUtils.getMessage("mantenimiento.equipamiento.consulta.err.lista"),
                        JOptionPane.ERROR_MESSAGE);
            } catch (GestorMantenimientoException gmE) {
                JOptionPane.showMessageDialog(null,
                        gmE.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.equipamiento.lista"),
                        JOptionPane.ERROR_MESSAGE);
            }
        }

        return cbEquipamiento;
    }

    /**
     * Permite la actualización del formulario tras seleccionar el equipamiento
     * en la lista desplegable
     * @param e 
     */
    private void cbEquipamientoActionPerformed(ActionEvent e) {

        EquipamientoDTO equipamiento = (EquipamientoDTO) cbEquipamiento.getSelectedItem();

        // Habilitamos los controles del formulario
        habilitaControles();

        idEquipamiento.setText(equipamiento.getIdEquipamiento().toString());
        nomEquipamiento.setText(equipamiento.getNomEquipamiento());
        if (equipamiento.getInactivo() == Constantes.INACTIVO) {
            chkInactivo.setSelected(true);
        } else if (equipamiento.getInactivo() == Constantes.INACTIVO) {
            chkInactivo.setSelected(false);
        }
        if (equipamiento.getTipoPrecio() == Constantes.PRECIO_POR_ESPACIO) {
            rBtnEspacio.setSelected(true);
        } else if (equipamiento.getTipoPrecio() == Constantes.PRECIO_POR_ASISTENTE) {
            rBtnAsistente.setSelected(true);
        }
        precioDia.setText(UtilidadesGUI.obtenerDecimal(equipamiento.getPrecioDia()));
        precioHora.setText(UtilidadesGUI.obtenerDecimal(equipamiento.getPrecioHora()));

        btnModificacion.setEnabled(true);
    }

    /**
     * Permite salir del formulario
     * @return btnCancelar el botón
     */
    private JButton getBtnCancelar() {
        if (btnCancelar == null) {
            btnCancelar = new JButton();
            btnCancelar.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.boton.volver"));
            btnCancelar.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    btnCancelarActionPerformed(e);
                }
            });
        }
        return btnCancelar;
    }

    /**
     * Cierra el formulario
     * @param e evento lanzado desde el botón
     */
    private void btnCancelarActionPerformed(ActionEvent e) {
        dispose();
    }

    /**
     * 
     * @param evt evento lanzado al cambiar la opción del checkbox
     */
    private void chkInactivoItemStateChanged(java.awt.event.ItemEvent evt) {

        btnBaja.setEnabled(true);
        btnModificacion.setEnabled(false);

    }

    /**
     * Realiza la baja/alta lógica del equipamiento en la base de datos
     * dependiendo del estado anterior (activa o inactiva el equipamiento)
     * @param evt 
     */
    private void btnBajaActionPerformed(java.awt.event.ActionEvent evt) {

        AuditoriaDTO auditoria = new AuditoriaDTO();
        try {

            if (chkInactivo.isSelected()) {
                // Damos de baja lógica al equipamiento
                objRemotoMantenimiento.bajaEquipamiento(Integer.parseInt(idEquipamiento.getText()));

                JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.equipamiento.baja.correcta"));

                auditaModificacion(Constantes.BAJA);

            } else {
                // Reactivamos el equipamiento
                objRemotoMantenimiento.activaEquipamiento(Integer.parseInt(idEquipamiento.getText()));

                JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.equipamiento.altalogica.correcta"));

                auditaModificacion(Constantes.ALTA);
            }

            // Inicialización de los campos del formulario
            deshabilitaControles();

        } catch (RemoteException eRe) {
            JOptionPane.showMessageDialog(null,
                    eRe.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.equipamiento.baja"),
                    JOptionPane.ERROR_MESSAGE);
        } catch (GestorMantenimientoException gmE) {
            JOptionPane.showMessageDialog(null,
                    gmE.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.equipamiento.baja"),
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    private void btnModificacionActionPerformed(java.awt.event.ActionEvent evt) {

        if (nomEquipamiento.getText().equals("")) {
            JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.equipamiento.modificacion.sindatos"));
        }
        // Comprobación de los precios introducidos
        if (!ValidarGUI.isDouble(precioDia.getText())) {
            JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.gui.err.decimal"));
            precioDia.setText("");
            return;
        }

        if (!ValidarGUI.isDouble(precioHora.getText())) {
            JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.gui.err.decimal"));
            precioHora.setText("");
            return;
        }
        try {
            EquipamientoDTO equipamiento = new EquipamientoDTO();

            equipamiento.setIdEquipamiento(Integer.parseInt(idEquipamiento.getText().trim()));
            equipamiento.setnomEquipamiento(nomEquipamiento.getText());

            if (DialogAltaEquipamiento.getSeleccion(btnGrpPrecio).getText().equals(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.alta.seleccion.espacio"))) {
                equipamiento.setTipoPrecio(Constantes.PRECIO_POR_ESPACIO);
            } else if (DialogAltaEquipamiento.getSeleccion(btnGrpPrecio).getText().equals(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.alta.seleccion.asistente"))) {
                equipamiento.setTipoPrecio(Constantes.PRECIO_POR_ASISTENTE);
            } else {
                JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.equipamiento.err.opcionprecio"));
            }

            equipamiento.setPrecioDia(Double.parseDouble(precioDia.getText().trim()));
            equipamiento.setPrecioHora(Double.parseDouble(precioHora.getText().trim()));

            if (chkInactivo.isSelected()) {
                equipamiento.setInactivo(Constantes.INACTIVO);
            } else {
                equipamiento.setInactivo(Constantes.ACTIVO);
            }

            objRemotoMantenimiento.modificaEquipamiento(equipamiento);

            JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mantenimiento.equipamiento.modificacion.correcta"));

            auditaModificacion(Constantes.MODIFICACION);

            // Inicialización de los campos de texto del formulario
            nomEquipamiento.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.nombre"));
            precioDia.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.preciodia"));
            precioHora.setText(TDSLanguageUtils.getMessage("mantenimiento.equipamiento.general.campo.preciohora"));


        } catch (GestorMantenimientoException gmE) {
            JOptionPane.showMessageDialog(null,
                    gmE.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.equipamiento.modificacion"),
                    JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException rE) {
            JOptionPane.showMessageDialog(null,
                    rE.getMessage(), TDSLanguageUtils.getMessage("gmantenimiento.err.equipamiento.modificacion"),
                    JOptionPane.ERROR_MESSAGE);
        }
        dispose();
    }

    /**
     * Realiza la auditoría de movimientos de modificación de datos de
     * equipamiento
     */
    private void auditaModificacion(String operacion) {

        AuditoriaDTO auditoria = new AuditoriaDTO();

        try {
            auditoria.setObjeto(Constantes.EQUIPAMIENTO);
            auditoria.setSujeto(idConectado);
            auditoria.setPk(idEquipamiento.getText());
            auditoria.setOperacion(operacion);

            objRemotoMantenimiento.altaAuditoria(auditoria);
        } catch (GestorMantenimientoException gmE) {
            JOptionPane.showMessageDialog(null,
                    gmE.getMessage(), TDSLanguageUtils.getMessage("auditoria.equipamiento.err.modificacion"),
                    JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException rE) {
            JOptionPane.showMessageDialog(null,
                    rE.getMessage(), TDSLanguageUtils.getMessage("auditoria.equipamiento.err.modificacion"),
                    JOptionPane.ERROR_MESSAGE);
        }
    }
}